Satzverarbeitung in einer Schleife

Das Öffnen eines Recordset stellt in der Regel mehrere Datensätze bereit. Diese werden meist in einer Schleife durchlaufen. Der folgende Ausschnitt aus der Ereignisprozedur Form_Open des Formulars FrmStart von Access_Quiz.mdb durchläuft alle Sätze des Recordset rstSCORESMCSchlüssel, um die Tabelle SCORESMC mit Skelettsätzen zu initialisieren. SCORESMC speichert die Mehrfachwahl-Antworten des Quizteilnehmers.

Der folgende Entwurf beschreibt die lesende Navigation durch den Recordset rstSCORESMCSchlüssel und das schreibende Anfügen in den Recordset rstSCORESMC:

Bilde aus der leeren Tabelle SCORESMC den Recordset rstSCORESMC
Bilde aus Fragenschlüssel und Alternativenschlüssel von QuizMEHRFACHWAHL 
  den Recordset rstSCORESMCSchlüssel
Solange rstSCORESMCSchlüssel nicht fertig
  Füge einen Satz mit den folgenden Feldern an SCORESMC:
    Fragenschlüssel = Fragenschlüssel von rstSCORESMCSchlüssel
    Alternativenschlüssel = Alternativenschlüssel von rstSCORESMCSchlüssel
    Matrikelnummer = Matrikelnummer des Quizteilnehmers
    Testschlüssel = Testschlüssel des Quizteilnehmers
    Benutzerlösung = False
  Gehe zum nächsten Satz von rstSCORESMCSchlüssel
Schliesse rstSCORESMC und rstSCORESMCSchlüssel

Der folgende VBA-Code implementiert den Entwurfscode. Im Gegensatz zum Entwurfscode kann er sich aber nicht darauf beschränken, die Programmlogik leserfreundlich zu beschreiben, sondern ist an die Syntax und Semantik von VBA gebunden. Dazu gehören rein implementationstechnische Entscheidungen, die nichts mit der Programmlogik zu tun haben. Zum Beispiel spezifiziert dbOpenDynaset das schreibende Durchlaufen eines Recordset, während dbOpenForwardOnly nur die vorwärtslesende Navigation erlaubt.

...
'-- Objektvariablen initialisieren
Set rstSCORESMC = .OpenRecordset("SCORESMC", dbOpenDynaset)
Set rstSCORESMCSchlüssel = .OpenRecordset( _
  "SELECT QuizMEHRFACHWAHL.Fragenschlüssel,QuizMEHRFACHWAHL.Alternativenschlüssel " & _
  "FROM QuizMEHRFACHWAHL;", dbOpenForwardOnly)
'-- SCORESMC-Skelett erstellen
'   --------------------------
'   Feld Fragenschlüssel ist identisch mit jenem von QuizMehrfachwahl
'   Feld Alternativenschlüssel ist analog zu jenem von QuizMehrfachwahl
'   Feld Matrikelnummer ist bei Selbstkorrektur -1
'   Feld Testschlüssel ist bei Selbstkorrektur -1
'   Feld Benutzerlösung = False (leeres Kontrollkästchen, das der Benutzer später setzt)
With rstSCORESMC
  Do While Not rstSCORESMCSchlüssel.EOF
    '- Satzskelett an das Ende von SCORESMC fügen
    .AddNew
    !Fragenschlüssel = rstSCORESMCSchlüssel!Fragenschlüssel
    !Alternativenschlüssel = rstSCORESMCSchlüssel!Alternativenschlüssel
    !Matrikelnummer = Matrikelnummer_des_Pb
    !Testschlüssel = Testschlüssel_des_Pb
    !Benutzerlösung = False   'später mit Benutzereingabe überschreiben
    .Update                   'Änderungen endgültig speichern
    rstSCORESMCSchlüssel.MoveNext
  Loop
  rstSCORESMCSchlüssel.Close
  Set rstSCORESMCSchlüssel = Nothing
  .Close
End With
Set rstSCORESMC = Nothing
...

Satzverarbeitung unter DAO

Verarbeitung eines einzigen Satzes unter DAO